package com.springstudy.redis.utils;

import com.sun.org.apache.xpath.internal.operations.Bool;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.io.Serializable;

/**
 * Redis工具类
 *
 * @author chenrongrong
 * @since 2020/3/12 15:45
 */
@Slf4j
@Component
public class RedisUtil {
    //这里需要注意注解为Resource，使用变量名称进行Bean的初始化，因为RedisTemplate不存在<Sring,Object>泛型类型的Bean实例
    //如果要使用Autowired，可以指定RedisTemplate，或者RedisTemplate<Stirng,String>
    @Resource
    RedisTemplate<String, Object> redisTemplate;

//    @Autowired
//    RedisTemplate redisTemplate;

//    @Autowired
//    RedisTemplate<String, String> redisTemplate;

    /**
     * 插入数据
     * @param key
     * @param value
     * @return
     */
    public Boolean set(String key, Object value) {
        if(redisTemplate == null) {
            log.info("redisTemplate注入失败");
            return false;
        }
        redisTemplate.opsForValue().set(key, value);
        //另一种形式，通过boundValueOps获取该key可操作的实例
        //redisTemplate.boundValueOps(key).set(value);
        return true;
    }

    /**
     * 插入数据，带过期时间
     * @param key 键
     * @param value 值
     * @param time 过期时间，秒
     * @return
     */
    public Boolean set(String key, Object value, Long time) {
        if(redisTemplate == null) {
            log.info("redisTemplate注入失败");
            return false;
        }
        redisTemplate.opsForValue().set(key, value, time);
        //另一种实现形式
        //redisTemplate.boundValueOps(key).set(value, time);
        return true;
    }

    /**
     * 获取数据
     * @param key
     * @return
     */
    public Object get(String key) {
        if(redisTemplate == null) {
            log.info("redisTemplate注入失败");
            return null;
        }
        return redisTemplate.opsForValue().get(key);
        //另一种实现形式
        //return redisTemplate.boundValueOps(key).get();
    }

}
